/*
 * 版权声明 (c) 2025 XXX科技有限公司
 *
 * 本软件及其相关文档文件受版权保护。未经版权所有者明确书面许可，任何单位或个人不得
 * 以任何形式复制、传播、修改、出售、出租、反向工程、反编译或利用本软件的任何部分。
 *
 * 对于任何违反本声明的行为，版权所有者保留追究法律责任的权利。
 */

#include "ulog.h"
#include <stdio.h>

// 自定义日志输出函数，用于订阅到 ulog
void custom_logger(ulog_level_t severity, char *msg) {
	const char *level_name = ulog_level_name(severity);
	printf("[%s] %s\n", level_name, msg);
}

// gcc -o ulog_demo main.c ulog.c -DULOG_ENABLED
int main() {
	// 初始化 ulog
	ULOG_INIT();

	// 订阅自定义日志输出函数，设置日志级别为 ULOG_INFO_LEVEL
	ulog_subscribe(custom_logger, ULOG_INFO_LEVEL);

	// 记录不同级别的日志消息
	ULOG_TRACE("This is a TRACE message."); // 低于 INFO 级别，不会被输出
	ULOG_DEBUG("This is a DEBUG message."); // 低于 INFO 级别，不会被输出
	ULOG_INFO("This is an INFO message.");		  // 会被输出
	ULOG_WARNING("This is a WARNING message.");	  // 会被输出
	ULOG_ERROR("This is an ERROR message.");	  // 会被输出
	ULOG_CRITICAL("This is a CRITICAL message."); // 会被输出
	ULOG_ALWAYS("This is an ALWAYS message.");	  // 会被输出

	// 取消订阅自定义日志输出函数
	ulog_unsubscribe(custom_logger);

	// 再次记录日志消息，此时不会有任何输出
	ULOG_INFO("This INFO message will not be logged.");

	return 0;
}